package juc.design.synchronization;

import lombok.extern.slf4j.Slf4j;

@Slf4j(topic = "c.WaitNotify")
public class WaitNotify {
    //用来同步的对象
    static Object obj = new Object();
    //t2 的运行标记， 代表t2是否执行过
    static boolean t2Staring = false;

    public static void main(String[] args) {
        Thread t1 = new Thread(()->{
            synchronized (obj){
                //如果t2未执行
                while (!t2Staring){
                    try {
                        //t1 先等一会
                        obj.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            log.debug("t1运行");
        },"t1");

        Thread t2 = new Thread(() -> {
            log.debug("t2运行");
            synchronized (obj) {
                // 修改运行标记
                t2Staring = true;
                // 通知 obj 上等待的线程（可能有多个，因此需要用 notifyAll）
                obj.notifyAll();
            }
        },"t2");

        t1.start();
        t2.start();
    }
}
